/**
 * @param {number[][]} triangle
 * @return {number}
 */
var minimumTotal = function(triangle) {
    let len =  triangle.length;
    // 用triangle记录到每个点路径最小的值
    for(let i = 0; i < len; i++) {
        for(let j = 0; j <= i; j++) {
            // 第一行的数字最小值就是本身
            if(i === 0 && j === 0) {
                continue;
            } else if(j === 0) { // j =  0，表示上一层只有下标相同的，没有减1的
                triangle[i][j] += triangle[i - 1][j]
            } else if(j === i){
                triangle[i][j] += triangle[i - 1][j - 1] // 同理 j = 1，上一层只有下标减一的，没有相等的
            } else {
                // 减一和相等都有，取二者最小值，和本身相加
                triangle[i][j] += Math.min(triangle[i - 1][j - 1], triangle[i - 1][j])
            }
        }
    }
    // 取最后一行值最小的。
    let min = triangle[len - 1][0]
    for(let k = 1; k < triangle[len - 1].length; k++) {
        if(triangle[len - 1][k] < min) min = triangle[len - 1][k]
    }
    return min;
    // return Math.min(...triangle[len - 1])
};
console.log(minimumTotal([[2],[3,4],[6,5,7],[4,1,8,3]]));